gusucode.com > VC++ 图像处理(灰度变换、图像合成、羽化、中心法校正)-源码 > VC++ 图像处理(灰度变换、图像合成、羽化、中心法校正)-源码程序/code/VCIPH/VCIPHDoc.cpp

    //Download by http://www.NewXing.com
// VCIPHDoc.cpp : implementation of the CVCIPHDoc class
//

#include "stdafx.h"
#include "VCIPH.h"

#include "VCIPHDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CVCIPHDoc

IMPLEMENT_DYNCREATE(CVCIPHDoc, CDocument)

BEGIN_MESSAGE_MAP(CVCIPHDoc, CDocument)
	//{{AFX_MSG_MAP(CVCIPHDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVCIPHDoc construction/destruction

CVCIPHDoc::CVCIPHDoc()
{
	// TODO: add one-time construction code here
	pDibs=NULL;
}

CVCIPHDoc::~CVCIPHDoc()
{
}

BOOL CVCIPHDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CVCIPHDoc serialization

void CVCIPHDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CVCIPHDoc diagnostics

#ifdef _DEBUG
void CVCIPHDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CVCIPHDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CVCIPHDoc commands

BOOL CVCIPHDoc::LoadBMP(LPCTSTR lpszPathName)
{
	BITMAPFILEHEADER Bfh; 
    BITMAPINFOHEADER Bmih;
	FILE  *fp;
	int	  wid,hei,bits,pals,size;
	RGBQUAD ColorTab[256];
 
	fp=fopen(lpszPathName,"rb");
	if (fp==NULL) return FALSE;

	fread(&Bfh,sizeof(BITMAPFILEHEADER),1,fp);  //  读入位图文件头
 	fread(&Bmih,sizeof(BITMAPINFOHEADER),1,fp); //  读入位图信息头

	wid =Bmih.biWidth;                      //  得图像主要参数
	hei =Bmih.biHeight;
	bits=Bmih.biBitCount;
 
	pDibs = CreateDibs(wid,hei,bits);       //  建立位图
	pals=(Bfh.bfOffBits-sizeof(BITMAPFILEHEADER)-
		        sizeof(BITMAPINFOHEADER));  //  计算调色板尺寸
    if (pals) {
  		fread(ColorTab,pals,1,fp);          //  读入调色板数据
		pDibs->setallpalette(ColorTab);     //  设置位图调色板
	}
 	size=(wid*bits+31)/32*4*hei;            //  计算像素字节数
 
	fseek(fp,Bfh.bfOffBits,SEEK_SET);       //  像素数据定位
	fread(pDibs->pBits,size,1,fp);          //  读入像素数据
	fclose(fp);  

   	return TRUE;
}

BOOL CVCIPHDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	// TODO: Add your specialized creation code here
 
	return(LoadBMP(lpszPathName));
}